function seisr=tvphsrot(seis,t,phi,tphi)
% TVPHSROT Time-variant constant-phase rotation of a trace with a Hilbert method
%
% trout=tvphsrot(trin,t,phi,tphi)
%
% TVPHSROT performs a time varient constant phase rotation of the input trace
% through an vector of angles (phi) in degrees.
%
% trin= input trace
% t= time coordinate vector for trin
% phi = vector of time-variant phases
% tphi =vector of times at which phi was measured
%
% trout= phase rotated trace
%
% by G.F. Margrave 2016
%
% NOTE: This SOFTWARE may be used by any individual or corporation for any purpose
% with the exception of re-selling or re-distributing the SOFTWARE.
% By using this software, you are agreeing to the terms detailed in this software's
% Matlab source file.

% BEGIN TERMS OF USE LICENSE
%
% This SOFTWARE is maintained by the CREWES Project at the Department
% of Geology and Geophysics of the University of Calgary, Calgary,
% Alberta, Canada.  The copyright and ownership is jointly held by
% its 'AUTHOR' (identified above) and the CREWES Project.  The CREWES
% project may be contacted via email at:  crewesinfo@crewes.org
%
% The term 'SOFTWARE' refers to the Matlab source code, translations to
% any other computer language, or object code
%
% Terms of use of this SOFTWARE
%
% 1) This SOFTWARE may be used by any individual or corporation for any purpose
%    with the exception of re-selling or re-distributing the SOFTWARE.
%
% 2) The AUTHOR and CREWES must be acknowledged in any resulting publications or
%    presentations
%
% 3) This SOFTWARE is provided "as is" with no warranty of any kind
%    either expressed or implied. CREWES makes no warranties or representation
%    as to its accuracy, completeness, or fitness for any purpose. CREWES
%    is under no obligation to provide support of any kind for this SOFTWARE.
%
% 4) CREWES periodically adds, changes, improves or updates this SOFTWARE without
%    notice. New versions will be made available at www.crewes.org .
%
% 5) Use this SOFTWARE at your own risk.
%
% END TERMS OF USE LICENSE

[nsamps,ntraces]=size(seis);

tphi=tphi(:);
phi=phi(:);
t=t(:);

%expand phases
if(tphi(1)>t(1))
    tphi=[t(1);tphi];
    phi=[phi(1);phi];
end
if(tphi(end)<t(end))
    tphi=[tphi;t(end)];
    phi=[phi;phi(end)];
end

phi2=interp1(tphi,phi,t);
theta=pi*phi2/180;

if((nsamps-1)*(ntraces-1)==0)
    %single channel
    seish=imag(herbert(seis));
    seisr=cos(theta).*seis-sin(theta).*seish;
else
    %multichannel
    seisr=zeros(size(seis));
    for k=1:ntraces
        tmp=seis(:,k);
        tmph=imag(herbert(tmp));
        seisr(:,k)=cos(theta).*tmp-sin(theta).*tmph;
    end
end